home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1993 December / PSL Monthly Shareware CD-ROM (December 1993).iso / prgmming / dos / c / rdcf.exe / RDCF2.H < prev   
C/C++ Source or Header  |  1993-01-15  |  5KB  |  198 lines

  1. /*-----------------------------------------------------------------------------
  2.           RDCF: A Reentrant DOS-Compatible File System, Version 2.0
  3.  
  4.                           by Philip J. Erdelsky
  5.                           CompuServe 75746,3411
  6.                     InterNet 75746.3411@compuserve.com
  7.  
  8.                            September 15, 1992
  9.  
  10.                   Copyright (c) 1992 Philip J. Erdelsky
  11. -----------------------------------------------------------------------------*/
  12.  
  13. #ifndef _RDCF
  14. #define _RDCF
  15.  
  16. #include <setjmp.h>
  17.  
  18. /* #define RDCF_SYSTEM_READ_ONLY  */
  19. #define RDCF_MULTIPLE_DRIVE
  20. #define RDCF_SECTOR_SIZE    512
  21.  
  22. struct rdcf_date_and_time
  23. {
  24.   unsigned char second;
  25.   unsigned char minute;
  26.   unsigned char hour;
  27.   unsigned char day;
  28.   unsigned char month;
  29.   unsigned short year;
  30. };
  31.  
  32. struct rdcf_file_information
  33. {
  34.   unsigned char spec[13];
  35.   unsigned char attribute;
  36.     #define RDCF_READ_ONLY  0x01
  37.     #define RDCF_HIDDEN     0x02
  38.     #define RDCF_SYSTEM     0x04
  39.     #define RDCF_VOLUME     0x08
  40.     #define RDCF_DIRECTORY  0x10
  41.     #define RDCF_ARCHIVE    0x20
  42.   struct rdcf_date_and_time date_and_time;
  43.   unsigned short first_cluster;
  44.   unsigned long size;
  45. };
  46.  
  47. /* FCB (File Control Block) */
  48.  
  49. struct rdcf
  50. {
  51.  
  52.   /* values that must be initialized by the calling program */
  53.  
  54.   unsigned char *buffer;
  55.   unsigned (*drive_access)(int, unsigned, unsigned, void *);
  56.  
  57.   /* file information */
  58.  
  59.   struct rdcf_file_information file;
  60.  
  61.   /* result codes */
  62.  
  63.   unsigned long position;
  64.   unsigned short drive_error;
  65.   short result;
  66.  
  67.   /* file system information */
  68.  
  69.   unsigned char drive;
  70.   #ifndef RDCF_SECTOR_SIZE
  71.     unsigned short sector_size;
  72.   #endif
  73.   unsigned short first_FAT_sector;
  74.   unsigned short sectors_per_FAT;
  75.   unsigned short first_directory_sector;
  76.   unsigned short first_data_sector;
  77.   unsigned short sectors_per_cluster;
  78.   unsigned short maximum_cluster_number;
  79.   unsigned short last_cluster_mark;
  80.  
  81.   /* internal use only */
  82.  
  83.   #ifndef RDCF_SYSTEM_READ_ONLY
  84.     unsigned char mode;
  85.   #endif
  86.   unsigned short directory_first_cluster;
  87.   unsigned short directory_cluster;
  88.   unsigned short directory_index;
  89.   unsigned char buffer_status;
  90.   unsigned short cluster;
  91.   unsigned short last_cluster;
  92.   unsigned short sector_in_buffer;
  93.   jmp_buf error;
  94. };
  95.  
  96. struct rdcf_format
  97. {
  98.   unsigned char x[19];
  99. };
  100.  
  101. /* error codes */
  102.  
  103. #define RDCF_ACCESS_DENIED        (-1)
  104. #define RDCF_DIRECTORY_CONFLICT   (-2)
  105. #define RDCF_DIRECTORY_FULL       (-3)
  106. #define RDCF_DISK_FORMAT_ERROR    (-4)
  107. #define RDCF_DRIVE_ERROR          (-5)
  108. #define RDCF_FILE_FORMAT_ERROR    (-6)
  109. #define RDCF_INVALID_DIRECTORY    (-7)
  110. #define RDCF_INVALID_SPEC         (-8)
  111. #define RDCF_MODE_ERROR           (-9)
  112. #define RDCF_FILE_NOT_FOUND       (-10)
  113. #define RDCF_RENAMING_ERROR       (-11)
  114. #define RDCF_SEEK_OUT_OF_RANGE    (-12)
  115. #define RDCF_UNRECOVERABLE_FILE   (-13)
  116.  
  117. /* prototype for function defined in application */
  118.  
  119. void rdcf_get_date_and_time(struct rdcf_date_and_time *);
  120.  
  121. /* formatting types */
  122.  
  123. #ifndef RDCF_SYSTEM_READ_ONLY
  124.   extern struct rdcf_format rdcf_format_360;
  125.   extern struct rdcf_format rdcf_format_720;
  126.   extern struct rdcf_format rdcf_format_1200;
  127.   extern struct rdcf_format rdcf_format_1440;
  128. #endif
  129.  
  130. /* modes for rdcf_open() */
  131.  
  132. #ifndef RDCF_SYSTEM_READ_ONLY
  133.   #define RDCF_CREATE      0
  134.   #define RDCF_READ        1
  135.   #define RDCF_READ_WRITE  2
  136. #endif
  137.  
  138. /* modes for rdcf_sort_directory() */
  139.  
  140. #ifndef RDCF_SYSTEM_READ_ONLY
  141.   #define RDCF_EXTENSION_NAME  0
  142.   #define RDCF_NAME_EXTENSION  1
  143.   #define RDCF_DATE_TIME       2
  144.   #define RDCF_SIZE            3
  145.   #define RDCF_REVERSE         8
  146. #endif
  147.  
  148. /* prototypes for functions defined in RDCF */
  149.  
  150. #ifdef RDCF_SYSTEM_READ_ONLY
  151.   int rdcf_open(struct rdcf *, char *);
  152. #else
  153.   int rdcf_attribute(struct rdcf *, char *, unsigned);
  154.   int rdcf_close(struct rdcf *);
  155.   int rdcf_date_and_time(struct rdcf *, char *, struct rdcf_date_and_time *);
  156.   int rdcf_delete(struct rdcf *, char *);
  157.   int rdcf_directory(struct rdcf *, char *);
  158.   int rdcf_format(struct rdcf *,
  159.     #ifdef RDCF_MULTIPLE_DRIVE
  160.       char *,
  161.     #endif
  162.     struct rdcf_format *);
  163.   int rdcf_move(struct rdcf *, char *, char *);
  164.   int rdcf_open(struct rdcf *, char *, unsigned);
  165.   int rdcf_recover(struct rdcf *, char *);
  166.   int rdcf_rename(struct rdcf *, char *, char *);
  167.   int rdcf_set_file_information(struct rdcf *, char *, unsigned,
  168.     struct rdcf_file_information *);
  169.   int rdcf_set_volume(struct rdcf *, char *);
  170.   int rdcf_sort_directory(struct rdcf *, char *, int);
  171.   int rdcf_undelete(struct rdcf *, char *);
  172.   int rdcf_wipe_drive(struct rdcf *
  173.     #ifdef RDCF_MULTIPLE_DRIVE
  174.       , char *
  175.     #endif
  176.     );
  177.   int rdcf_write(struct rdcf *, void *, int);
  178. #endif
  179.  
  180. int rdcf_get_file_information(struct rdcf *, char *, unsigned);
  181. int rdcf_next_file_information(struct rdcf *);
  182. int rdcf_get_volume(struct rdcf *
  183.   #ifdef RDCF_MULTIPLE_DRIVE
  184.     , char *
  185.   #endif
  186.   );
  187. long rdcf_free_space(struct rdcf *
  188.   #ifdef RDCF_MULTIPLE_DRIVE
  189.     , char *
  190.   #endif
  191.   );
  192. int rdcf_match(char *, char *);
  193. int rdcf_read(struct rdcf *, void *, int);
  194. int rdcf_seek(struct rdcf *, unsigned long);
  195.  
  196. #endif
  197.  
  198.